package com.demo.java.OD351_400.OD399;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【分配土地最大面积(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146248634
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读入矩阵的行数和列数
        int m = scanner.nextInt();
        int n = scanner.nextInt();

        // 用于存储每个元素值对应的行列范围的映射
        Map<Integer, int[]> numRowCol = new HashMap<>();

        // 用于存储最大面积的变量
        int maxArea = 0;

        // 遍历矩阵的每一行
        for (int i = 0; i < m; i++) {
            // 读入当前行的元素列表
            int[] row = new int[n];
            for (int j = 0; j < n; j++) {
                row[j] = scanner.nextInt();
            }

            // 遍历当前行的每个元素
            for (int j = 0; j < n; j++) {
                // 如果元素值大于0
                if (row[j] > 0) {
                    // 获取当前元素值对应的行列范围
                    int[] rowColValues = numRowCol.getOrDefault(row[j], new int[]{m, -1, n, -1});

                    // 更新行的范围
                    rowColValues[0] = Math.min(i, rowColValues[0]);
                    rowColValues[1] = Math.max(i, rowColValues[1]);

                    // 更新列的范围
                    rowColValues[2] = Math.min(j, rowColValues[2]);
                    rowColValues[3] = Math.max(j, rowColValues[3]);

                    // 计算当前矩形区域的行距和列距
                    int rowRange = rowColValues[1] - rowColValues[0] + 1;
                    int colRange = rowColValues[3] - rowColValues[2] + 1;

                    // 计算当前矩形区域的面积
                    int area = rowRange * colRange;

                    // 更新最大面积
                    maxArea = Math.max(maxArea, area);

                    // 如果当前最大面积已经大于等于剩余未遍历区域的可能最大面积，提前退出循环
                    if (maxArea >= (m - i) * (n - j)) {
                        break;
                    }

                    // 更新映射
                    numRowCol.put(row[j], rowColValues);
                }
            }
        }

        System.out.println(maxArea);
    }
}